package com.cheetah.start.common.util;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.cheetah.start.common.constant.FileSuffixConst;
import com.cheetah.start.common.exception.CheetahException;
import lombok.extern.slf4j.Slf4j;
import org.noear.solon.core.handle.UploadedFile;

import java.io.File;
import java.util.Date;

/**
 * @author 12392
 * @auther xjh
 * @create 2021/5/16
 **/
@Slf4j
public class FileUtil {


    /**
     * 检查文件后缀类型及判空
     *
     * @param file 文件
     * @throws CheetahException 我的文件异常
     */
    public static void checkCommonSuffix(UploadedFile file) throws CheetahException {
        if (file == null) {
            throw new CheetahException("文件为空");
        }
        String name = file.getName();
        // 不存在的话 i 为 -1 后面还是会抛不支持后缀类型异常
        int i = name.lastIndexOf(StrUtil.DOT);
        name = name.substring(i + 1);
        if (!isAllowSuffix(name, FileSuffixConst.DEFAULT_ALLOWED_EXTENSION)) {
            throw new CheetahException("不支持此文件后缀类型");
        }
    }

    /**
     * 获取已日期分隔的文件名称
     *
     * @param file 文件
     * @return {@link String} 返回示例 2021/06/12/02f93b8d01cd41728d9bcff229e6d2c2.jpg
     */
    public static String getDateFileName(UploadedFile file) {
        String originalFilename = file.getName();
        int i = originalFilename.lastIndexOf(StrUtil.DOT);
        originalFilename = DateUtil.format(new Date(), "yyyy/MM/dd/") + IdUtil.simpleUUID() + originalFilename.substring(i);
        return originalFilename;
    }

    /**
     * 被生成的名字现在的名字
     *
     * @param generateName 生成的名字
     * @return {@link String}
     */
    public static String getNowNameByGenerateName(String generateName) {
        int i = generateName.lastIndexOf(StrUtil.SLASH);
        return generateName.substring(i + 1);
    }

    /**
     * 后缀是否符合限制后缀字符数组
     *
     * @param suffix 后缀
     * @param allows 允许的后缀数组
     * @return boolean
     */
    public static boolean isAllowSuffix(String suffix, String[] allows) {
        boolean temp = false;
        for (String allowSuffix : allows) {
            if (allowSuffix.equals(suffix.toLowerCase())) {
                temp = true;
                break;
            }
        }
        return temp;
    }


    /**
     * 检查路径
     *
     * @param fullPath 路径
     * @return {@link File}
     */
    public static File getFileAndCheck(String fullPath) {
        File fileHave = new File(fullPath);
        if (!fileHave.getParentFile().exists()) {
            boolean mkdirs = fileHave.getParentFile().mkdirs();
            if (!mkdirs) {
                log.error("创建文件夹失败:[{}]", fileHave.getParent());
            }
        }
        return fileHave;
    }

    /**
     * 得到现在的名字
     *
     * @param host 宿主
     * @return {@link String}
     */
    public static String getNowName(String host) {
        int i = host.lastIndexOf(StrUtil.SLASH);
        return host.substring(i + 1, host.length() - 1);
    }
}
